package definition

import (
	"save-kindle/source/ddd/dp"
)

// ParserName 解析器名称
type ParserName string

// Parser 解析器
type Parser interface {
	CatalogParser
	ChapterParser
	PageParser
	ContentParser
}

// fixme 统一语言 目录就是章节的集合
// CatalogParser 目录解析器
type CatalogParser interface {
	// ParserChapterList 解析章节
	// bookCatalog 目录
	ParserChapterList(bookCatalog dp.BookCatalog) []dp.BookChapter
}

// ChapterParser 章节解析器
type ChapterParser interface {
	// ParserChapterTitle 解析章节名称
	// bookCatalog 目录
	ParserChapterTitle(title string) string
	// ParserChapterUrl 解析章节URL
	ParserChapterUrl() string
}

// PageParser 页解析器
type PageParser interface {
	// ParserPage 解析页内容
	ParserPage(chapter dp.BookChapter, pageNo int) string
	// GetPageUrl 获取 page url
	GetPageUrl(chapter dp.BookChapter, pageNo int) string
	// HasNextPage 是否有下一页
	HasNextPage(pageHtml string) bool
}

// ContentParser 正文解析器
type ContentParser interface {
	// ParserContent 解析章节内容
	ParserContent(pageHtml string) []string
}

//type ChapterParserEvent struct {
//	ParserName  ParserName
//	Parser      ChapterParser
//	BookCatalog dp.BookCatalog
//}
//
//type ParserCommandHandler struct {
//	ParserPool map[ParserName]Parser
//}
//
//func (handler ParserCommandHandler) invoke(parserEvent ChapterParserEvent) []Chapter {
//	if parser, ok := handler.ParserPool[parserEvent.ParserName]; ok {
//		return parser.ParserChapter(parserEvent.BookCatalog)
//	}
//	return nil
//}
